package com.ruoyi.course.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.course.domain.ClassUserTemplate;
import com.ruoyi.course.domain.ExamClass;
import com.ruoyi.course.vo.ExamClassVo;
import com.ruoyi.course.vo.ExamClassUserVo;
import com.ruoyi.course.vo.ExamClassCourseVo;
import com.ruoyi.course.vo.ExamClassDetailVo;

import java.util.List;

/**
 * 考试班次Service接口
 *
 * @author Tellsea
 * @date 2025-09-26
 */
public interface IExamClassService extends IService<ExamClass> {

    /**
     * 分页查询
     *
     * @param entity
     * @return
     */
    TableDataInfo<ExamClassVo> queryList(ExamClassVo entity);

    /**
     * 查询全部
     *
     * @param entity
     * @return
     */
    List<ExamClassVo> queryAll(ExamClassVo entity);

    /**
     * 根据ID查询
     *
     * @param id
     * @return
     */
    ExamClassVo queryById(Long id);

    /**
     * 导入课程班次人员列表
     * @param studnetList
     * @param classId
     * @return
     */
    Long importData(List<ClassUserTemplate> studnetList, Long classId);

    /**
     * 查询班次学员分页列表
     * @param entity
     * @return
     */
    TableDataInfo<ExamClassUserVo> queryClassStudentList(ExamClassUserVo entity);

    /**
     * 移除班次学员
     * @param classId 班次ID
     * @param userId 用户ID
     * @return
     */
    int removeClassStudent(Long classId, Long userId);

    /**
     * 查询班次课程分页列表
     * @param entity
     * @return
     */
    TableDataInfo<ExamClassCourseVo> queryClassCourseList(ExamClassCourseVo entity);

    /**
     * 新增班次课程关系
     * @param classId 班次ID
     * @param courseId 课程ID
     * @return
     */
    int addClassCourse(Long classId, Long courseId);

    /**
     * 批量新增班次课程关系
     * @param classId 班次ID
     * @param courseIds 课程ID列表
     * @return 成功添加的数量
     */
    int addClassCourses(Long classId, List<Long> courseIds);

    /**
     * 移除班次课程关系
     * @param classId 班次ID
     * @param courseId 课程ID
     * @return
     */
    int removeClassCourse(Long classId, Long courseId);

    /**
     * 查询班次详情（包含关联课程信息）
     * @param id 班次ID
     * @return 班次详情信息
     */
    ExamClassDetailVo queryDetailById(Long id);

    /**
     * 分页查询当前用户参加的班级列表
     * @param entity 查询条件
     * @return 分页数据
     */
    TableDataInfo<ExamClassVo> queryUserClassList(ExamClassVo entity);
}
